package com.wg.net;

/**
 * 网络相关配置常量定义类
 *
 * @author 少爷123
 */
public class NetConstant {

    // ------------------------------ HTTP 服务相关常量 ------------------------------
    /**
     * HTTP 服务监听端口键名（默认值：0，自动分配）
     */
    public static final String HTTP_PORT = "network.http.port";

    /**
     * 是否启用 HTTP SSL 加密键名（默认值：false）
     */
    public static final String HTTP_SSL = "network.http.ssl";

    /**
     * SSL 证书文件名键名（支持 .pfx/.jks，启用 SSL 时必填）
     */
    public static final String HTTP_SSL_FILENAME = "network.http.ssl.filename";

    /**
     * SSL 私钥路径键名（启用 SSL 时必填）
     */
    public static final String HTTP_SSL_PRIVATE_KEY = "network.http.ssl.private.key";

    /**
     * HTTP 最大请求内容长度键名（单位：字节，默认值：1048576=1MB）
     */
    public static final String HTTP_MAX_CONTENT_LENGTH = "network.http.max.content.length";


    // ------------------------------ TCP 服务相关常量 ------------------------------
    /**
     * TCP 监听端口键名（默认值：0，自动分配）
     */
    public static final String TCP_PORT = "network.tcp.port";

    /**
     * TCP 连接队列大小（backlog）键名（默认值：65535）
     */
    public static final String TCP_BACKLOG_SIZE = "network.tcp.backlog.size";

    /**
     * 是否允许 TCP 地址重用键名（默认值：true）
     */
    public static final String TCP_REUSE_ADDR = "network.tcp.reuse.addr";

    /**
     * 是否启用 TCP Keep-Alive（长连接）键名（默认值：true）
     */
    public static final String TCP_KEEP_ALIVE = "network.tcp.keep.alive";

    /**
     * 是否禁用 TCP Nagle 算法（TCP No Delay）键名（默认值：true）
     */
    public static final String TCP_NO_DELAY = "network.tcp.no.delay";

    /**
     * 最大帧长度（字节）键名（默认值：1024 * 1024=1MB）
     */
    public static final String MAX_FRAME_LENGTH = "network.tcp.max.frame.length";

    // ------------------------------ SSL 配置相关常量 ------------------------------
    /**
     * 是否启用 SSL 客户端认证键名（默认值：false）
     */
    public static final String SSL_CLIENT_AUTH = "network.ssl.client.auth";


    // ------------------------------ WebSocket 相关常量 ------------------------------
    /**
     * WebSocket 服务路径键名（默认值："/"）
     */
    public static final String WEBSOCKET_PATH = "network.websocket.path";


    // ------------------------------ 通用网络配置常量 ------------------------------
    /**
     * Netty 工作线程数键名（默认值：CPU核心数×2）
     */
    public static final String WORKER_THREADS = "network.worker.threads";

    /**
     * 连接无操作超时时间键名（单位：秒，0表示不生效，默认值：30）
     */
    public static final String DISCONNECT_TIMEOUT = "network.disconnect.timeout";

    /**
     * 网络封包日志启用状态键名（默认值：false）
     */
    public static final String LOG_ACTIVE = "network.log.active";

    /**
     * Gzip 压缩阈值键名（单位：字节，默认值：5242=5KB）
     */
    public static final String GZIP_THRESHOLD = "network.gzip.threshold";

    /**
     * TCP 连接最大等待队列长度键名（默认值：65535）
     */
    public static final String BACKLOG_SIZE = "network.backlog.size";

    /**
     * 是否允许地址重用键名（默认值：true）
     */
    public static final String IS_REUSE_ADDR = "network.is.reuse.addr";

    /**
     * 是否启用长连接（Keep-Alive）键名（默认值：true）
     */
    public static final String IS_KEEP_ALIVE = "network.is.keep.alive";

    /**
     * 是否禁用 Nagle 算法（TCP No Delay）键名（默认值：true）
     */
    public static final String IS_TCP_NO_DELAY = "network.is.tcp.no.delay";

    /**
     * 子通道是否启用长连接键名（默认值：true）
     */
    public static final String IS_CHILD_KEEP_ALIVE = "network.is.child.keep.alive";

    /**
     * 子通道是否禁用 Nagle 算法键名（默认值：true）
     */
    public static final String IS_CHILD_TCP_NO_DELAY = "network.is.child.tcp.no.delay";

    /**
     * 是否启用分块写（支持大文件传输）键名（默认值：true）
     */
    public static final String IS_CHUNKED_WRITE_ENABLED = "network.is.chunked.write.enabled";

    /**
     * 读取超时时间键名（单位：秒，0表示不超时，默认值：0）
     */
    public static final String READ_TIMEOUT = "network.read.timeout";

    /**
     * 优雅关闭超时时间键名（单位：秒，默认值：60）
     */
    public static final String SHUTDOWN_TIMEOUT = "network.shutdown.timeout";

    /**
     * 请求最小间隔时间键名（单位：毫秒，默认值：200）
     */
    public static final String REQUEST_INTERVAL = "network.request.interval.ms";

    /**
     * 低水位线键名（单位：字节，默认值：64KB）
     */
    public static final String LOW_WATER_MARK = "network.low.water.mark";

    /**
     * 高水位线键名（单位：字节，默认值：128KB）
     */
    public static final String HIGH_WATER_MARK = "network.high.water.mark";


    // ------------------------------ 私有构造函数（防止实例化） ------------------------------
    private NetConstant() {
        throw new UnsupportedOperationException("NetConstant 为工具类，禁止实例化");
    }
}